package com.example.validated.controller;

import com.example.validated.annotation.TestValidGroup;
import com.example.validated.annotation.VerifySeq;
import com.example.validated.vo.*;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.groups.Default;
import java.util.Objects;

// 参考文档：https://www.cnblogs.com/liconglong/p/11720580.html
@Validated
@RestController
@RequestMapping("/onClass")
public class OnClassController {
    /*
     * @RequestBody参数校验，在方法参数上声明校验注解
     * 格式：@RequestBody+@Validated+实体类
     * 或者：@RequestBody+@Valid+实体类
     */
    @PostMapping("/addUser2")
    public String addUser2(@RequestBody @Validated UserValidated user) {
        return "ok";
    }

    /*
     * 嵌套检验。valid可以实现嵌套校验
     */
    @PostMapping("/userInfo")
    public TeamDTO userInfo(@RequestBody @Valid TeamDTO teamDTO) {
        return teamDTO;
    }

    /*
     * https://blog.csdn.net/qq_33753147/article/details/128704781
     * 未显示指定groups的字段，默认归于javax.validation.groups包下的Default.class（默认组）
     * @Validated的value不指定组时，只校验Default组的字段
     * @Validated的value指定组时，只校验属于指定组的字段，属于Default组的字段不会被校验
     * 若想指定组和默认组都被校验，有两种方式
     * 1、在@Validated的value中加入默认组，如下：
     * 2、将指定的Update接口继承Default接口，如下：
     */
    @PostMapping("/updateUser")
    public String updateUser(@Validated(value = {TestValidGroup.Update.class}) @RequestBody User user) {
        return "hello";
    }

    @PostMapping("/insertUser")
    public String insertUser(@Validated @RequestBody User user) {
        return "hello";
    }

    @PostMapping("/verifySeq")
    public String user(@Validated(VerifySeq.class) @RequestBody VerifySeqDTO verifySeqDTO) {
        return "ok";
    }

    @PostMapping("/addUser")
    public String addUser(@RequestBody UserValidated user, BindingResult bindResult) {
        UserValidated use1 = new UserValidated();
//        use1.setSalary(1);
//        if (use1.getSalary() == 1) {
//            System.out.println("----");
//        }
        // 如果有错误
        if (bindResult.hasErrors()) {
            // 返回提示信息
            return Objects.requireNonNull(bindResult.getFieldError()).getDefaultMessage();

        }
        UserValidated user1 = new UserValidated();
        return "ok";
    }
}
